package com.solomiao.demo.multi.thread.demo3;

public class ThreadImplementDemo3 implements Runnable {

    @Override
    public void run() {
        // 存在并发问题，需要使用同步机制
        System.out.println("子线程：开始运行...");
        for (int i = 0; i < 10000; i++) {
            MainDemo3.count ++;
        }
        System.out.println("子线程：已安全退出...");

        // 同步机制，确保count1的安全访问
        System.out.println("子线程：开始运行...");
        for (int i = 0; i < 10000; i++) {
            synchronized (MainDemo3.class) {
                MainDemo3.count1 ++;
            }
        }
        System.out.println("子线程：已安全退出...");

        // 使用 AtomicInteger 保证原子性
        System.out.println("子线程：开始运行...");
        for (int i = 0; i < 10000; i++) {
            MainDemo3.count2.incrementAndGet();
        }
        System.out.println("子线程：已安全退出...");

        // 使用同步方法
        System.out.println("子线程：开始运行...");
        for (int i = 0; i < 10000; i++) {
            MainDemo3.incrementCounter();
        }
        System.out.println("子线程：已安全退出...");

        // 使用同步方法2
        System.out.println("子线程：开始运行...");
        for (int i = 0; i < 10000; i++) {
            MainDemo3.incrementCounter4();
        }
        System.out.println("子线程：已安全退出...");
    }

}
